package com.tedu.api;

import javafx.beans.value.ObservableLongValue;
import org.junit.Test;

/**
 * Java万物皆对象-->真的是面向对象--->不全是【八大基础数据类型】
 * 对象【类--创建对象，调用属性，方法】
 * 八个基础数据类型---本项类型---类---包装类【对象，通过点调用方法，属性】
 *包装类不可以修改：final修饰类，无法继承
 * 八个包装类的方法基本是通用的
 *       int        Integer    java.long   继承Number
 *       long       Long       java.long   继承Number
 *       double     Double     java.long   继承Number
 *       short      Short      java.long   继承Number
 *       float      Float      java.long   继承Number
 *       byte       Byte       java.long   继承Number
 *       char       Character  java.long   继承Object
  *     boolean     Boolean    java.long   继承Object
 */
public class Package {
    @Test
    public void test(){
        int i=1;//不是面向对象
        Integer a=new Integer(i);//面向对象
        a.toString();
    }
    /**
     * 包装类API
     * 抽象类Number 父类：Integer,Long,Double,Short,Float,Byte
     * xxValue抽象方法：把包装类转换成基础数据类型的方法
     * IntValue方法    返回int变量
     * LongValue方法   返回long变量
     * doubleValue方法   返回double变量
     * shortValue方法    返回short变量
     * floatValue方法    返回float变量
     * byteValue方法     返回byyte变量
     * 需求：把以上六个数据类型，转换包装类，输出基本数据类型
     */
    @Test
    public void testValue(){
        //int方法打包---包装类---取出---从包装类直接取基本数据类型
        Integer i=new Integer("123");
        int is=i.intValue();//包装类  类型转换为int类型

        Integer t=new Integer("123");
        int si=t.intValue();

        System.out.println("Integer包装类："+(is==si));
        //==  对比  值
        System.out.println("Integer包装类："+i.equals(t));
        //.equals  对比对象  确定对象是否有值【包装类--实际值】 有实际值  对比
        //其他5个基础数据类型包装类--打包  拆包
        //JavaBean
        Long l=new Long("123");
        long l1=Long.valueOf("135");
        System.out.println();
    }
    /**
     * xxxValue抽象方法-----6个基础数据类型的包装类
     *                     包装类.Value("对应类型")
     *                     静态方法【打包，拆包】
     *
     * 打包：对应包装类中存对应的类型
     * 拆包：对应包装类，类型，取出
     */
    @Test
    public void testValueOf() {
        int i = Integer.valueOf("123");//类名点出来,静态方法【Number抽象类】

        boolean b = Boolean.valueOf("true");
        char c = Character.valueOf('i');
    }
/**
 * parseXXX    静态方法  【重点：Servlet javaWeb】
 * 作用：将字符串转换为对应的类型
 * 参数传递---字符串---给字符串转换为对应的类型
 * 注意：字符串可以随便写，不可以随便解析成对应类型
 */
    @Test
    public void testParseXXX(){
        //1.把基本数据类型转换为字符串  2 转换为字符串
        String s=String.valueOf("2");
        //2.把字符串转换为基础数据类型方法--->需要解析出来
        String s2="2x";
        System.out.println(s2+"打桩");
     //   int i=Integer.parseInt(s2);
        //NumberFormatException
        //需求：把s3到s6正确解析出来

        String s3="123.123";
        System.out.println(s3+"");//或者用float
        double d=Double.parseDouble(s3);

        String s4="true";
        System.out.println(s4+"");
        boolean b=Boolean.parseBoolean(s4);

        String s5="10L";//无法加L表示long 符合3种类型：Integer，Byte,short
     //   long l=Long.parseLong(s5);

        String s6="a";//Character字符类型包装类：无法解析
       // byte b1=Byte.parseByte(s6);
       //总结：1.字符类，无法正确的解析成对应类型，不存在char字符
       //     2.字面量L/F，认为这是一个字符串，解析失败
    }
    /**
     * 包装类  自动拆装箱
     * JDK1.5 新特性  2004
     * JDK1.5之前没有自动拆装箱
     */
    @Test
    public void test01(){
        //JDK1.5
        Integer in =Integer.valueOf("1");//输入类型转换为Integer
        int i=in.intValue();//把包装好的类型，基础数据类型取出
        //JDK1.5 之后  定义方法编译器认可，并非JVM编译器认可
        Integer it=1;//装箱
        int is=it;//拆箱
        //自动拆装箱实际上，把拆箱与装箱的步骤交给idea执行
    }
}
